import java.util.HashMap;
import java.util.Stack;


public class Declaration implements YakaConstants {
	
	/** Type du prochain objet (parametre, variable ou constante) en cours de declaration. */
	public Integer prochainType;
	
	/** Type du prochain objet en cours de declaration  */
	private String prochainNomIdent;
	
	/** Type de la prochaine fonction en cours de declaration. */
	private Integer prochainTypeFonction;
	
	/** Nom de la prochaine fonction en cours de declaration. */
	private String prochaineFonction;

	
	public void ajouterVariable(String cle) { 
		Yaka.tableIdents.rangeIdent(cle, prochainType, Ident.VARIABLE);
		//prochainType = TYPE_ERREUR;
	}
	
	public void ajouterFonction(String cle, HashMap<String, Ident> idents) {
		Yaka.tableIdents.rangeIdent(cle, prochainTypeFonction, Ident.FONCTION);
		Yaka.tableIdents.chercheFonction(cle).setIdents((HashMap<String, Ident>) (idents.clone()));
		Yaka.tableIdents.chercheFonction(cle).setParam((Stack<String>) (Yaka.tableIdents.getParam().clone()));
		
		//System.out.println("___________" + Yaka.tableIdents.toString() + ", pour la fonction " + cle + "________");
		prochainTypeFonction = TYPE_ERREUR;
	}
	
	public void ajouterConstante(Integer type, int valeur) { 
		Yaka.tableIdents.rangeConstante(prochainNomIdent, type, Ident.CONSTANTE, valeur);
		prochainNomIdent = "";
	}
	
	public void ajouterConstante(String valeur) {
		Constante constante = (Constante) Yaka.tableIdents.chercheConstante(valeur);
		ajouterConstante(constante.getType(), constante.getValeur());
	}
	
	public void ajouterParametreFonction(String cle) { 
		Yaka.tableIdents.rangeIdent(cle, prochainType, Ident.PARAMETRE_FONCTION);
		prochainType = TYPE_ERREUR;
	}
	
	public void setProchainType(Integer type) {
		prochainType = type;
	}
	
	public void setProchainNomIdent(String cle) {
		prochainNomIdent = cle;
	}
	
	public void setProchaineFonction(String nom) {
		prochaineFonction = nom;
		prochainTypeFonction = prochainType;
		prochainType = TYPE_ERREUR;
	}
	
	public String getProchaineFonction() {
		return prochaineFonction;
	}
	
	public int getType(String cle) {
		return Yaka.tableIdents.chercheIdent(cle).getType();
	}
}
